# # !/usr/bin/env python3
# # -*- coding: utf-8 -*-
# """
# ===========================
# @Time : 2022/10/1 0001 0:10
# @Author : 测试开发工程师
# @File : config.py
# @Software: PyCharm
# ============================
# """
#
# import pytest
# from selenium import webdriver
# from _pytest.config.argparsing import Parser
# from _pytest.config import Config
#
# web_env = {}
#
#
# # 实现命令行注册，解决自定义参数报错问题
# def pytest_addoption(parser: Parser):
#     # 注册一个命令行组
#     hogwarts = parser.getgroup("hogwarts")
#     # 第一个参数为指定的命令行的参数的形式  - pytest --browser=chrome  pytest 23、浏览器兼容性测试.py
#     hogwarts.addoption("--browser", default="firefox", dest="browser", help="指定执行的浏览器")  # default 默认为 firefox，dest 起别名
#
#
# def pytest_configure(config: Config):
#     browser = config.getoption("browser")
#     print(f"通过命令行获取到的浏览器为{browser}")
#     web_env['browser'] = browser
#
#
# # 定义登录的数据共享，自动应用 autouse=True
# @pytest.fixture()
# def login():
#     # setup操作
#     print('完成登录操作')
#     token = '931585776884645888'
#     yield token  # 返回 token
#     print('完成登出操作')
#
#
# # 定义连接浏览器的数据共享
# @pytest.fixture()
# def get_driver():
#     driver = webdriver.Chrome()
#     driver.implicitly_wait(10)
#     driver.maximize_window()
#     yield driver
#     driver.quit()
#
#
# # 定义连接数据库的数据共享
# @pytest.fixture()
# def connectDB():
#     print('连接数据库')
#     yield
#     print('断开数据库')
#
#
# from typing import Optional
#
# # def pytest_runtest_setup(item: "Item") -> None:
# #     print("hook: setup")
# #
# #
# # def pytest_runtest_teardown(item: "Item", nextitem: Optional["Item"]) -> None:
# #     print('hook: teardown')
#
# import pytest
#
#
# # ============== hookspec文件在 External Libraries  -> _pytest -> hookspec =====================
# # ================= 好的框架允许定制 和 扩展 ======================
#
# # 内置插件：Hook函数
# # 是个函数，在系统触发时被系统调用
# # 自动触发机制
#
# @pytest.mark.parametrize('name', ['哈利', '波特'])
# def test_name(name):
#     print(f'name是：{name}')
#
#
# # 在conftest里，定义以下
# import yaml
#
# from typing import Optional
#
#
# # ================== 1. 添加前后置 ==============================
# def pytest_runtest_setup(item: "Item") -> None:
#     print("hook: setup")
#
#
# def pytest_runtest_teardown(item: "Item", nextitem: Optional["Item"]) -> None:
#     print('hook: teardown')
#
#
# # =========================== 2. 修改编码格式   ===============================================
#
# """
# 一、含有中文的测试用例名称，改写编码格式
# 修改默认编码格式
#     1、测试用例的名字
#     2、测试用例的路径
# """
#
#
# # 收集完测试用例，之后被调用的hook函数
# # =================== 2. 修改编码格式（支持中文），pytest 默认编码格式为 unicode ============================
# def pytest_collection_modifyitems(session, config, items) -> None:
#     for item in items:
#         # name : 测试用例的名字
#         item.name = item.name.encode("utf-8").decode("unicode_escape")
#         # nodeid :  测试用例的路径
#         item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")
#     # 用例名称反转
#     # items.reverse()
#
#
# # ============= unicode  修改编码格式 ================
# a = "\\u8d6b\\u654f"
# a.encode("utf-8").decode("unicode_escape")
#
#
# # ==========================    二、添加命令行参数(addoption)  =================================================
# # 定义一个命令行参数
# def pytest_addoption(parser):
#     # 将下面所有的 option 都展示在这个 group 下
#     mygroup = parser.getgroup('hogwarts')
#     mygroup.addoption('--env',  # 注册一个命令行选项
#                       default='test',  # 参数的默认值
#                       dest='env',  # 存储的变量，为属性命令，可以使用 Option 对象访问到这个值，暂用不到
#                       help='set your run env'  # 帮助提示，参数的描述信息
#                       )
#     mygroup.addoption('--env1',  # 注册一个命令行选项
#                       default='test1',  # 参数的默认值
#                       dest='env1',  # 存储的变量，为属性命令，可以使用 Option 对象访问到这个值，暂用不到
#                       help='set your run env'  # 帮助提示，参数的描述信息
#                       )
#
#
# @pytest.fixture(scope='session')
# def cmdoption(request):
#     res = request.config.getoption('--env')
#     return res
#
#
# @pytest.fixture(scope='session')
# def cmdoption(request):
#     myenv = request.config.getoption('--env', default='test')
#     if myenv == 'test':
#         datapath = 'datas/test/data.yaml'
#     elif myenv == 'dev':
#         datapath = 'datas/test/data.yaml'
#
#     with open(datapath) as f:
#         datas = yaml.safe_load(f)
#     return myenv, datas
#
#
# if __name__ == '__main__':
#     cmdoption()
#
# #  =======================    打包发布（开源） ==========================
# # 帖子链接： ceshiren.com/t/topic/14156
# """
# 发布到： www.pypi.org(python第三方库平台)
# 代码上传： github
# 打包项目构成：
#     源码包
#     setup.py（构建）
#     测试包
# """
#
# from setuptools import setup, find_packages
#
# setup(
#     name='pytest_encode',
#     url='https://github.com/xxx/pytest-encode',
#     version='1.0',
#     author='MackJia',
#     author_email='214829112@qq.com',
#     description='set your encoding and logger',
#     long_description='show chinese for mark.parametrize(),Define logger...............',
#     # 分类索引，pip 对所属包的分类
#     classifiers=[
#         'Framework::Pytest',
#         'Programming Language::Python',
#         'Topic::Software Development:: Testing',
#         'Programming Language:: Python:: 3.8',
#     ],
#     license='proprietary',
#     package=find_packages(),
#     keywords=[
#         'pytest', 'py.test', 'pytest_encode',
#     ],
#     # 需要安装的依赖包
#     install_requires=[
#         'pytest'
#     ],
#     # 入口函数
#     entry_points={
#         'pytest11': [
#             'pytest_encode = pytest_encode.main',
#         ]
#     },
#     zip_safe=False
#
# )
#
# # 打包命令
# """
# 依赖包安装：
#     pip install setuptools (python 包的管理工具，负责安装和发布，尤其是安装拥有有关依赖关系的包)
#     pip install wheel （生成 *.whl 格式的安装包，本质上也是一种压缩包）
# 打包命令：
#     python setup.py sdist bdist_wheel
#
# """
#
# # 发布命令
# """
# python -m pip install --user --upgrade twine （安装 twine 工具）
# python -m twine upload --repository testpypi dist/* (上传代码)
# """
